package net.zjitc.controller;

import net.zjitc.pojo.CartItem;
import net.zjitc.pojo.Orderitem;
import net.zjitc.pojo.Orders;
import net.zjitc.pojo.User;
import net.zjitc.service.CartService;
import net.zjitc.service.Impl.CartServiceImpl;
import net.zjitc.service.Impl.OrderServiceImpl;
import net.zjitc.service.OrderService;
import net.zjitc.utils.CommonUtils;
import net.zjitc.utils.dispacher.URLMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by Administrator on 2017/12/13.
 */
public class UserOrder {
    OrderService orderService = new OrderServiceImpl();
    CartService cartService = new CartServiceImpl();
    @URLMapping(url = "/createOrder")
    public String creatOrder(HttpServletRequest request, HttpServletResponse response){
        /**
         * 1.从session user
         * 2.生成一个订单对象 order（id UUID 时间 未付款 收货人信息（默认收货信息，是当前用户） 用户）
         * 3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
         * 4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）
         * 5.订单条目是个集合，要把它放在订单下面
         * 6.把order订单插入数据库（事务）
         * 7.购物车清空
         * 8.order放到request域中，转发到订单页面
         */

        //1.从session user
        User user = (User) request.getSession().getAttribute("user");
        if (user==null) {
            user = new User();
            user.setUid(1);
            user.setUsername("aaa");
            user.setAddr("工贸");
            user.setPhone("1110");
        }

        //2.生成一个订单对象 order（id UUID 时间 未付款 收货人信息（默认收货信息，是当前用户） 用户）
        Orders orders = new Orders();
        orders.setOid(CommonUtils.getUUID());

        //默认收货信息为登录用户信息
        orders.setAddr(user.getAddr());
        orders.setPhone(user.getPhone());
        orders.setName(user.getName());

        orders.setState(0); //0：代表未付款。   1：付款，但未发货。  2：发货，但未收货。   3：收货 交易完成
        orders.setUser(user);
        //下单时间  下单时间 字符串 //写个方法   方法功能：日期转成字符串
        orders.setOrdertime(CommonUtils.dateToString(new Date()));

        //3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
        List<CartItem> _cartItemList = cartService.findByUid(user.getUid());
        //判断购物车是否为空，为空，则不生成
        if (_cartItemList==null){
            return "/WEB-INF/user/order.jsp";
        }

        //4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）
        List<Orderitem> orderitemList = new ArrayList<Orderitem>();//此集合用于存放订单条目
        double total = 0.0;
        for (CartItem item: _cartItemList) {
            Orderitem orderitem = new Orderitem();
            orderitem.setOrder(orders);
            orderitem.setProduct(item.getProduct());
            orderitem.setOsatate(0);//评价状态
            orderitem.setCount(item.getQuantity());
            orderitem.setSubtotal(item.getProduct().getShop_price() * item.getQuantity());
            total = total + item.getProduct().getShop_price() * item.getQuantity();//计算总价；
            orderitemList.add(orderitem);
        }
            //5.订单条目是个集合，要把它放在订单下面
            orders.setOrderitemList(orderitemList);
            orders.setTotal(total);

            //6.把order订单插入数据库（事务service）
            int count = orderService.add(orders);

            //7.此用户下的购物车清空
            //cartService.clearCart(user.getUid());

            //8.order放到request域中，转发到订单页面
            request.setAttribute("orders", orders);

        return "/WEB-INF/user/order.jsp";
    }
}
